<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>父组件向子组件传递数据——依赖注入的引入</title>
</head>
<body>
<div id="app">
    <parent v-bind:information="info"></parent>
</div>

<template id="child">
    <h1>Hello, World!</h1>
    <h2>{{ info }}</h2>
</template>

<template id="parent">
    <!--   <div>{{ information }}</div>-->
    <child v-bind:info="information"></child>
</template>

<script type="module">
    import {createApp, ref} from "../../../../js/vue.esm-browser.js";
    import {defineComponent, provide, inject} from "../../../../js/vue.esm-browser.js";


    let child = defineComponent(
        {
            template: "#child",
            setup() {
                // inject 函数定义接受从父组件中传递的数据
                // 第一个参数是父组件中定义的传递数据使用的名称
                // 第二个参数是当该传递的数据不存在时，使用的默认值。
                let info = inject("info", "Hi, Vue!");

                return {
                    info
                };
            }
        }
    );

    let parent = defineComponent(
        {
            template: "#parent",

            components: {
                child,
            }
        }
    );
    let app = createApp(
        {
            setup() {
                let info = ref("Hello, Vue!")
                // provide 函数定义向子组件中进行数据的传递
                // 第一个参数是向子组件传递数据使用的名称
                // 第二个参数是向子组件通过名称传递的真实数据，这个数据可以是任何类型。
                provide("info", info.value)
                return {
                    info,
                }
            },
            components: {
                parent,
            }
        }
    )
    app.mount("#app")
</script>
</body>
</html>